package com.yxw.yxnet_cd_center.customer_service.mapper;

import com.yxw.yxnet_cd_center.customer_service.entity.YxCsCustTagEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsOperatePushCustEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsRoleMenuEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsUserMenuEntity;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 关联表相关Mapper接口
 *
 * @author xiexuxin
 * @date 2023-09-20
 */
@Repository
public interface RelevancyMapper {

    /**
     * 根据userId删除用户角色关联表中的数据
     * @param userId
     */
    void deleteUserRoleByUserId(Long userId);

    /**
     * 新增一条用户角色关联数据
     * @param userId
     * @param roleId
     */
    void insertUserRole(Long userId, Long roleId);

    /**
     * 根据roleId删除角色菜单关联表中的数据
     * @param roleId
     */
    void deleteRoleMenuByRoleId(Long roleId);

    /**
     * 新增一条角色菜单关联数据
     * @param menuId
     * @param roleId
     */
    void insertRoleMenu(Long roleId, Long menuId);

    /**
     * 根据operateId删除运营标签关联表中的数据
     * @param operateId
     */
    void deleteOperateTagByOperateId(Long operateId);

    /**
     * 新增一条运营标签关联数据
     * @param operateId
     * @param dictCode
     */
    void insertOperateTag(Long dictCode, Long operateId);

    /**
     * 根据operateId删除运营客户关联表中的数据
     * @param operateId
     */
    void deleteOperateCustByOperateId(Long operateId);

    /**
     * 新增一条运营客户关联数据
     * @param operateId
     * @param custId
     */
    void insertOperateCust(Long operateId, Long custId);

    /**
     * 根据运营项目查询客户
     * @param operateId
     * @return
     */
    List<YxCsOperatePushCustEntity> selectCustByOperateId(Long operateId);

    /**
     * 根据operateId删除运营商品关联表中的数据
     * @param operateId
     */
    void deleteOperateProductByOperateId(Long operateId);

    /**
     * 新增一条运营商品关联数据
     * @param operateId
     * @param productId
     */
    void insertOperateProduct(Long productId, Long operateId);

    /**
     * 批量新增角色菜单关联数据
     * @param roleMenus
     */
    void insertRoleMenus(List<YxCsRoleMenuEntity> roleMenus);

    /**
     * 批量新增员工菜单关联数据
     * @param userMenus
     */
    int insertUserMenus(List<YxCsUserMenuEntity> userMenus);

    /**
     * 批量新增客户标签关联数据
     * @param custTags
     */
    void insertCustTags(List<YxCsCustTagEntity> custTags);

    /**
     * 根据userId删除员工菜单关联表中的数据
     * @param userId
     */
    void deleteUserMenuByUserId(Long userId);

    /**
     * 根据用户Id查询对应菜单
     * @param userId
     * @return
     */
    List<Long> selectMenuIdsByUserId(@Param("userId") Long userId);

    /**
     * 根据角色Id查询对应菜单
     * @param roleId
     * @return
     */
    List<Long> selectMenuIdsByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据用户ID查询对应用户菜单
     * @param userId
     * @return
     */
    List<YxCsUserMenuEntity> selectUserMenuByUserId(Long userId);

    /**
     * 根据用户ID查询对应角色菜单
     * @param roleId
     * @return
     */
    List<YxCsRoleMenuEntity> selectRoleMenuByRoleId(Long roleId);

    /**
     * 根据客户ID删除客户标签关联表中的数据
     * @param custId
     */
    void deleteCustTagBycustId(Long custId);

    /**
     * 根据标签ID删除客户标签关联表中的数据
     * @param tagId
     */
    void deleteCustTagByTagId(Long tagId);
}
